﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://www.acwing.com/problem/content/description/4202/
/*
题目描述：
给定两个正整数 a
 和 b
。

你需要回答 q
 个询问。

每个询问给定两个整数 l,r
，你需要找到最大的整数 x
，满足：

x
 是 a
 和 b
 的公约数。
l≤x≤r
。
输入格式
第一行包含两个整数 a,b
。

第二行包含一个整数 q
。

接下来 q
 行，每行包含两个整数 l,r
。

输出格式
每个询问输出一行答案，即满足条件的最大的 x
，如果询问无解，则输出 −1
。

数据范围
前六个测试点满足 1≤a,b≤100
，1≤q≤20
。
所有测试点满足 1≤a,b≤109
，1≤q≤104
，1≤l≤r≤109
。

输入样例：
9 27
3
1 5
10 11
9 11
输出样例：
3
-1
9

*/

// 开始解题：
// 方法——辗转相除法 + 暴力枚举
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}



int main() {
    int a, b, q, l, r;
    scanf("%d%d", &a, &b);
    int maxd = gcd(a, b);
    int d[1350], cnt = 0;
    for (int i = 1; i <= maxd / i; i++) {
        if (maxd % i == 0) {
            d[cnt++] = i;
            if (i != maxd / i) {
                d[cnt++] = maxd / i;
            }
        }
    }
    sort(d, d + cnt);

    scanf("%d", &q);
    while (q--) {
        scanf("%d%d", &l, &r);
        int ret = -1;
        for (int i = cnt - 1; i >= 0; i--) {
            if (l <= d[i] && d[i] <= r) {
                ret = d[i];
                break;
            }
        }
        printf("%d\n", ret);
    }
    return 0;
}


